More types: structs, slices, and maps.
Pointers
ポインタは値のメモリアドレスを指す。
変数Tのポインタは、*T型で、ゼロ値はnil。
&オペレータはポインタを引き出す。
*オペレータはポインタの指す先の変数を示す。
code:go
package main
import "fmt"
func main() {
i, j := 42, 2701
p := &i // 変数iの値のアドレスを指すポインタ変数
fmt.Println(*p) // ポインタ変数pを通して変数iの値を読み取る
*p = 21 // ポインタ変数pを通して変数iに値を代入
fmt.Println(i) // 変数iの新しい値を見る
p = &j // 変数jの値のアドレスを指すポインタ変数
*p = *p / 37 // ポインタ変数pを通して変数jの値を37で割る
fmt.Println(j) // 変数jの新しい値を見る
}
Structs
構造体はフィールドの集まり。
code:go
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
fmt.Println(Vertex{1, 2})
}
Struct Fields
構造体のフィールドは、.でアクセスする。
code:go
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
v := Vertex{1, 2}
v.X = 4
fmt.Println(v.X)
}
Pointers to structs
構造体のフィールドは、構造体のポインタを通してアクセスすることもできる。
code:go
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
v := Vertex{1, 2}
p := &v
// (*p).X = 1e9
p.X = 1e9 // (*p).Xの簡略記法
fmt.Println(v)
}
Struct Literals
構造体リテラル